package org.tissou.server.Services.importer;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.tissou.client.Services.importer.RecupererTransactions;
import org.tissou.client.Services.Parametres;
import org.tissou.client.Services.MonException;
import org.tissou.client.DonneesAAfficher.Donnees_Base;
import org.tissou.client.DonneesAAfficher.LigneDonnee;
import org.tissou.client.DonneesAAfficher.TypeDonnee;
import org.tissou.client.Utils.TestOuComptes;
import org.tissou.server.importer.*;
import org.tissou.server.importer.ofx.ImporteurOFX;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.util.logging.Logger;

/**
 * Created by IntelliJ IDEA.
 * User: Manu
 * Date: 25 juil. 2009
 * Time: 14:22:29
 * To change this template use File | Settings | File Templates.
 */
public class RecupererTransactionsImpl extends RemoteServiceServlet implements RecupererTransactions {


  private static final Logger LOG = Logger.getLogger(RecupererTransactionsImpl.class.getName());

  private DossierPleinDeFichiers fichiers;
  private TransformateurParametresEnDonnees transformateur;

  public RecupererTransactionsImpl() {
    fichiers = new DossierPleinDeFichiers(TestOuComptes.getImportFilePath());
    transformateur = new TransformateurParametresEnDonnees();
  }
  public Donnees_Base recupererTransactions() throws MonException {
    List<Parametres> toutesLesOperations = new ArrayList<Parametres>();

    boolean fichierTrouve = false;
    LOG.info("TOTO");

    for (File fichier : fichiers.tousLesFichiers()) {
      if (fichier.canRead() && fichier.getAbsolutePath().endsWith(".ofx")) {
        try {
          ImporteurDeTransactions importeur = new ImporteurOFX(new FileInputStream(fichier));
          GenerateurOperation generateur = new GenerateurOperationSimple(importeur);
          toutesLesOperations.addAll(generateur.genererOperations());
          fichierTrouve = true;
        } catch (FileNotFoundException e) {
          LOG.severe("Pas pu trouver le fichier");
        } catch (IOException e) {
          LOG.severe("Pas pu ouvrir le fichier");
        }
      }
    }
    if (!fichierTrouve) {
      LOG.info("Rien a importer");
      throw new MonException("Pas de fichier valide trouve.");
    }
    List<LigneDonnee> lignes = new ArrayList<LigneDonnee>(toutesLesOperations.size());
    for (Parametres p : toutesLesOperations) {
      lignes.add(transformateur.transformeMoiCa(p));
    }
    return new Donnees_Base(lignes);
  }
}